﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _InformaticaIndustrial_DerivdosVinicos.DTO;
using Dao;

namespace _InformaticaIndustrial_DerivdosVinicos.Interfaz
{
	public partial class BMProducto : Form
	{
		#region Property

		private IPProducto ipProducto = new IPProducto();

		#endregion Property

		#region Events

		public BMProducto()
		{
			InitializeComponent();
			LoadDGV();
		}

		private void buttonBuscar_Click(object sender, EventArgs e)
		{
			LoadDGV();
		}

		private void buttonCancelar_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void dgvProductos_CellContentClick(object sender, DataGridViewCellEventArgs e)
		{
			try
			{
				int id;

				switch (e.ColumnIndex)
				{
					case 0:
						id = Convert.ToInt32(dgvProductos.Rows[e.RowIndex].Cells["Id"].Value);
						new ABMProducto(id).ShowDialog();
						LoadDGV();
						break;
					case 1:
						id = Convert.ToInt32(dgvProductos.Rows[e.RowIndex].Cells["Id"].Value);
						Producto prod = (Producto)ipProducto.getPorId(id);
						prod.fechaBaja = DateTime.Now;
						IPProducto.confirmarCambios();
						MessageBox.Show("Producto eliminado");
						LoadDGV();
						break;
					default:
						break;
				}
			}
			catch (Exception)
			{
				string accion = (e.ColumnIndex == 0 ? "modificar" : "eliminar");

				MessageBox.Show("Ocurrió un error al " + accion + " el producto");
			}
		}

		#endregion Events

		#region Methods

		private void LoadDGV()
		{
			dgvProductos.DataSource = GetProds();
		}

		private IList<DTOProducto> GetProds()
		{
			IList<Producto> prods = ipProducto.getByCriterio<Producto>("NombreProducto", "LIKE", "%" + txtBuscar.Text.Trim() + "%");
			IList<DTOProducto> dtos = new List<DTOProducto>();
			DTOProducto dto;

			foreach (var item in prods)
			{
				dto = new DTOProducto
				{
					almacen = item.Almacen,
					categoria = item.CategoriaArticulo,
					claseArt = item.ClaseArticulo,
					codBonifDcto = item.CodigoBonificacion,
					codeProd = item.codProducto,
					codImp = item.CodigoImpuesto,
					codVta = item.CodigoAnalisisVenta,
					costAlmacen = item.CostoAlmacenamiento.Value,
					costEmision = item.CostoEmision.HasValue ? item.CostoEmision.Value : 0,
					costUnitProd = item.CostoUnitario.HasValue ? item.CostoUnitario.Value : 0,
					ctoStd = item.CostoEstandard.HasValue ? item.CostoEstandard.Value : 0,
					descripProd = item.NombreProducto,
					estanteria = item.Estanteria,
					idProduct = item.IdProducto,
					loteStd = item.TamañoLoteStandard.HasValue ? item.TamañoLoteStandard.Value.ToString() : "",
					nombreMedida = item.Medida.NombreMedida,
					nombreProv = item.Proveedor.razonSocial,
					nroPlano = item.NumPlano,
					numDpto = item.NumeroDepartamento,
					pesoUnit = item.PesoUnidad.HasValue ? item.PesoUnidad.Value : 0,
					planificador = item.Persona.Apellido,
					porcPrecioUnit = item.PorcentPrecioUnitario.HasValue ? item.PorcentPrecioUnitario.Value : 0,
					precioBase = item.PrecioBase.HasValue ? item.PrecioBase.Value : 0,
					tipoPolitica = item.TipoPolitica
				};

				dtos.Add(dto);
			}

			return dtos;
		}

		#endregion Methods
	}
}
